package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

type Options struct {
	input     string       //json文件
	outDir    string       //输出目录
	limit     string       //只生成的服务名
	toFile    string       //输出文件
	proxy     bool         //使用proxy 模式生成
	genSubDir bool         // 是否生成子目录
	backend   string       // backend 版本
	runtime   string       // runtime 版本
	jsonData  *IdlJsonNode //解析出来的json信息
}

func (o *Options) Preprocess() (err error) {
	err = o.DealPath()
	if err != nil {
		return err
	}

	return o.LoadJson()
}

func (o *Options) DealPath() (err error) {
	// 转换为绝对路径
	o.outDir, err = DealInputPath(o.outDir)
	if err != nil {
		return err
	}
	// 处理输入
	o.input, err = filepath.Abs(o.input)
	if err != nil {
		fmt.Println(err)
		os.Exit(-1)
	}

	if len(opts.toFile) != 0 {
		opts.toFile = filepath.Base(opts.toFile)
	}

	Logf("初始化工具 输出路径 %s", o.outDir)
	Logf("初始化工具 输入路径 %s", o.input)
	return
}

func (o *Options) LoadJson() (err error) {
	jsonfile, err := os.Open(o.input)
	if err != nil {
		Logf("read file %s error %v", o.input, err)
		return err
	}
	defer jsonfile.Close()

	jsonbytes, _ := ioutil.ReadAll(jsonfile)
	err = json.Unmarshal(jsonbytes, o.jsonData)
	if err != nil {
		return err
	}
	return nil
}

var (
	opts = Options{
		jsonData: &IdlJsonNode{},
	}
)
